/******************************************************************************/
/*  Class AD7814ARM                                                           */
/*  PO: S. Maslyakov, rusoil.9@gmail.com                                      */
/*                                                                            */
/*  Revision:     1.0                                                         */
/*  Date:         2010/12/22 14:11:33                                         */
/******************************************************************************/


#include "data_types.h"
#include "Core\core.h"
#include "Spi\spi.h"
#include "TNKernel\tn.h"
#include "Ad7814arm\ad7814arm.h"



//==============================================================================
// App: Init
//==============================================================================
void AD7814ARM::Init_Ad7814arm() {
    // Conf cs
    PINSEL9_bit.P4_28 = 0;                // CS
    FIO4DIR_bit.P4_28 = 1;                // CS
    PINMODE9_bit.P4_28 = 0;               // 0=PULL_UP

    LockChip();
}
//==============================================================================
//==============================================================================


//==============================================================================
// App: Read temp
//==============================================================================
sint16_t AD7814ARM::ReadTemp() {
    sint16_t temp = 0;
    sint32_t err;

    // Lock mutex
    err = tn_mutex_lock((TN_MUTEX *)SPI::Get_spi_mutex(), TN_MSEC_TO_TICK(100));

    if (err != TERR_NO_ERR) {
        return temp;
    };

    SelectChip();

    // Read 1
    SPI_BUFF = AD7814_SPI_READ_CLK;
    while (!(SPI_FREE));
    temp = SPI_BUFF;

    // Read 2
    SPI_BUFF = AD7814_SPI_READ_CLK;
    temp <<= 8;
    while (!(SPI_FREE));
    temp |= SPI_BUFF;

    LockChip();

    // Realese mutex
    tn_mutex_unlock((TN_MUTEX *)SPI::Get_spi_mutex());

    temp >>= 5;
    m_lastTemp = ((temp * AD7814_CONVERS) / 100);

    return m_lastTemp;
}
//==============================================================================
//==============================================================================